首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在SQL查询中使用变量

在SQL查询中使用变量
EN

Stack Overflow用户
提问于 2015-06-30 10:34:44
回答 1查看 616关注 0票数 1

我需要创建一个数据库,但需要从变量中获取名称和路径:

代码语言:javascript
复制
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

但我知道第一行的错误:

代码语言:javascript
复制
Implicit conversion from data type sql_variant to nvarchar is not allowed. Use the CONVERT function to run this query.

我也得到了一个关于连接函数的错误。

我想在查询中使用@Datapath和@Database。

我遗漏了什么?

更新1

代码语言:javascript
复制
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
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-06-30 10:47:48

在T中有两个错误:

  1. 没有指定@Datapath@Database变量的大小

替换你的

代码语言:javascript
复制
declare @YourVariable nvarchar = ...

通过

代码语言:javascript
复制
declare @YourVariable nvarchar(<YourSize>) = ...
  1. serverproperty返回一个sql_variant,所以如果需要一个nvarchar,就可以转换它。

变化

代码语言:javascript
复制
serverproperty('InstanceDefaultDataPath');

代码语言:javascript
复制
cast(serverproperty('InstanceDefaultDataPath') as nvarchar(200));

结果如下:

代码语言:javascript
复制
declare @Datapath nvarchar(200) = cast(serverproperty('InstanceDefaultDataPath') as nvarchar(200));
declare @Database nvarchar(50) = 'DatabaseName';

如果需要,可以随意调整nvarchar的大小。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31135933

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档