我需要创建一个数据库,但需要从变量中获取名称和路径:
declare @Datapath nvarchar = serverproperty('InstanceDefaultDataPath');
declare @Database nvarchar = 'DatabaseName';
use master
go
if exists (select name from sys.databases where name = '@Database')
drop database [@Database]
go
create database [@Database]
on primary (
name = '@Database_Data'),
filename = concat(@Datapath, '@Database_Data.mdf'),
size = 200MB,
maxsize = 20GB,
filegrowth = 40MB
)
collate Latin1_General_CI_AI
go但我知道第一行的错误:
Implicit conversion from data type sql_variant to nvarchar is not allowed. Use the CONVERT function to run this query.我也得到了一个关于连接函数的错误。
我想在查询中使用@Datapath和@Database。
我遗漏了什么?
更新1
declare @Datapath nvarchar(200) = cast(serverproperty('InstanceDefaultDataPath') as nvarchar(200));
declare @Database nvarchar(50) = 'DatabaseName';
use master
go
if exists (select name from sys.databases where name = '@Database')
drop database [@Database]
go
create database [@Database]
on primary (
name = '@Database',
filename = concat(@Datapath, '@Database_Data.mdf'),
size = 200MB,
maxsize = 20GB,
filegrowth = 40MB
)
collate Latin1_General_CI_AI
go发布于 2015-06-30 10:47:48
在T中有两个错误:
@Datapath和@Database变量的大小替换你的
declare @YourVariable nvarchar = ...通过
declare @YourVariable nvarchar(<YourSize>) = ...serverproperty返回一个sql_variant,所以如果需要一个nvarchar,就可以转换它。变化
serverproperty('InstanceDefaultDataPath');至
cast(serverproperty('InstanceDefaultDataPath') as nvarchar(200));结果如下:
declare @Datapath nvarchar(200) = cast(serverproperty('InstanceDefaultDataPath') as nvarchar(200));
declare @Database nvarchar(50) = 'DatabaseName';如果需要,可以随意调整nvarchar的大小。
https://stackoverflow.com/questions/31135933
复制相似问题